package com.Jano.mapper;

import com.Jano.entity.Dept;
import com.Jano.vo.DeptAddVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface DeptMapper {
    /**
     * 根据部门编号找对应部门
     *
     * @param deptNo
     * @return
     */
    Dept selectDeptByDeptNo(Integer deptNo);

    /**
     * 查找所有的部门
     *
     * @return
     */
    List<Dept> selectAllDept();

    /**
     * 统计部门总记录数
     *
     * @return
     */
    int selectDeptCount();

    /**
     * 根据部门名称模糊查询部门信息
     * @param deptName
     * @return
     */
    Dept selectDeptByDeptName(String deptName);

    /**
     * 新增一个部门
     * @param deptAddVo
     * @return
     */
    Boolean addDept(DeptAddVo deptAddVo);

    /**
     * 更新部门
     */
    Boolean updateDept(@Param("deptNo") Integer deptNo ,@Param("dName") String dName,@Param("loc") String loc);

    /**
     * 删除指定的部门
     * @param deptNptNo
     * @return
     */
    Boolean delDeptByDeptNo(@Param("deptNo") Integer deptNptNo);

    /**
     * 根据dName 和 loc 动态查询部门 如果都为空则查询全部
     * ⚠️因为这里是动态sql 所以如果如果都为空则查询全部 那么接受应该用list
     * @param dName
     * @param loc
     * @return
     */
    List<Dept> selectDeptByDNameAndLoc(@Param("dName") String dName,@Param("loc") String loc);

    /**
     * 动态更新部门
     * @param deptNO
     * @param dName
     * @param loc
     * @return
     */
    Boolean dynamicUpdateDept (@Param("deptNo") Integer deptNO,@Param("dName") String dName,@Param("loc") String loc);

    /**
     * 动态的给定多个部门id然后查询其对应部门信息
     * @param deptNos
     * @return
     */
    List<Dept> selectDeptByDeptNoes (@Param("deptNos") List<Integer> deptNos);

    /**
     * 用于查询本插入的新记录id的操作 主键查询
     * @return
     */
    Integer insertDept(Dept dept);

    /**
     * 根据部门编号找对应部门以及下面的所有员工
     * @param deptNo
     * @return
     */
    Dept getDeptByDeptNo(@Param("deptNo") Integer deptNo);
}
